﻿using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using reformatter;

namespace reformatter.tests
{
    [TestFixture]
    public class reformatter_Test
    {
        [Test]
        public void Nichtvorhandene_Datei_einlesen()
        {
            var eingabedatei = ".\testdateien\nix";
            var erwartet = string.Empty;
            
            var sut = new reformatter.Reformat();
            var ergebnis = sut.Lese_Datei_ein(eingabedatei);
            
            Assert.AreEqual(erwartet, ergebnis);
        }

        [Test]
        public void fehlerCode_testen_wenn_Schreiben_nicht_möglich()
        {
            var ausgabedateiname = "\\superserver\bongo.txt";
            var inhalt = new List<string>(new string[]{string.Empty});
            var sut = new Reformat();
            int fehlercode = sut.schreibe_zeilenweise(inhalt, ausgabedateiname);
            int erwartet = 1;
            Assert.AreEqual(erwartet, fehlercode);
        }

        [Test]
        public void fehlercode_wenn_alles_ok()
        {
            var ausgabedateiname = "c:\test.txt";
            var inhalt = new List<string>(new string[] { string.Empty });
            var sut = new Reformat();
            int fehlercode = sut.schreibe_zeilenweise(inhalt, ausgabedateiname);
            int erwartet = 0;
            Assert.AreEqual(erwartet, fehlercode);
            // Datei wieder löschen!
        }

        [Test]
        public void aufteilen_aus_white_spaces()
        {
            var eingabe = "A B";
            var sut = new Reformat();
            IEnumerable<string> rückgabe = sut.Aufteilen_in_Worte_an_Whitespaces(eingabe);
            int erwartet = 2;
            int anzahl_der_Worte = rückgabe.Count();
            Assert.AreEqual(erwartet, anzahl_der_Worte);
        }
        [Test]
        public void zeilen_bauen_aus_einem_Wort()
        {
            IList<string> eingabe = new List<string>();
            int zeilenlänge = 80;
            eingabe.Add("A");
            var sut = new Reformat();
            int erwartet = 1;
            IEnumerable<string> rückgabe = sut.Zeilen_bauen(eingabe,zeilenlänge);
            int anzahl_der_Zeilen = rückgabe.Count();
            Assert.AreEqual(erwartet, anzahl_der_Zeilen);
        }

        [Test]
        public void eingabe_parameter_lesen()
        {
            var eingabe = new string[] {"a", "b", "1"};

            var sut = new Reformat();
            System.Tuple<string, string, int> parameter = sut.Lese_Eingabeparameter(eingabe);

            Assert.AreEqual("a", parameter.Item1);
            Assert.AreEqual("b", parameter.Item2);
            Assert.AreEqual(1, parameter.Item3);
        }

        ////Integrationstest
        //[Test]
        //public void formatieren_Integration()
        //{
        //    var inhalt = "A";
        //    var zeilenlänge = 80;
        //    var sut = new Reformat();
        //    int erwartet = 1;
        //    IEnumerable<string> rückgabe = sut.formatieren(inhalt, zeilenlänge);
        //    int anzahl_der_Zeilen = rückgabe.Count();
        //    Assert.AreEqual(erwartet, anzahl_der_Zeilen);
        //}

        //Integrationstest
        [Test]
        public void teste_KomplettenAufruf()
        {
            var eingabe = new string[] { "a", "b", "1" };
            var sut = new Reformat();
            int code = sut.format(eingabe);
            // Was mach ich  hier?
            //ISt alles gut wenn kein Fehler auftritt?
        }
    }
}
